import bcrypt from 'bcrypt';

// 设置bcrypt加密的强度（工作因子）
const SALT_ROUNDS = 10;

/**
 * 密码加密工具函数
 * @param password 原始密码
 * @returns 加密后的密码哈希值
 */
export const encryptPassword = async (password: string): Promise<string> => {
  
  if (!password) {
    throw new Error('密码不能为空');
  }
  
  try {
    // 生成盐值并加密密码
    const salt = await bcrypt.genSalt(SALT_ROUNDS);
    const hash = await bcrypt.hash(password, salt);
    return hash;
  } catch (error) {
    console.error('密码加密失败:', error);
    throw new Error('密码加密过程中发生错误');
  }
};

/**
 * 验证密码
 * @param inputPassword 输入的密码
 * @param storedHash 存储的哈希值
 * @returns 是否匹配
 */
export const verifyPassword = async (inputPassword: string, storedHash: string): Promise<boolean> => {

  if (!inputPassword || !storedHash) {
    return false;
  }
  
  try {
    // 使用bcrypt的compare方法验证密码
    return await bcrypt.compare(inputPassword, storedHash);
  } catch (error) {
    console.error('密码验证失败:', error);
    return false;
  }
};